/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Consulta;

/**
 *
 * @author Soares
 */
    
  public class ConsultaDAO {

    private Connection con;          //Objeto utilizado para o estabelecimento de uma conexÃ£o.
    private PreparedStatement pstm;  //Objeto utilizado para o envio de instruÃ§Ãµes SQL.  
    private ResultSet rs;            //Objeto utilizado para guardar o resultado de um SELECT.
    //private GeneroDAO generoDAO;     //Objeto utilizado para pesquisar gÃªneros na tabela de generos.

    public static final int ORDEM_POR_ID = 0;
    public static final int ORDEM_POR_NOME = 1;
   

    //O construtor da classe cria os recursos necessÃ¡rios para manipulaÃ§Ã£o de dados
    //do banco.
    public ConsultaDAO() throws SQLException {
        //Registra o conector com o banco de dados atravÃ©s do DriverManager.
        DriverManager.registerDriver(new org.postgresql.Driver());
        //Aqui criamos uma conexÃ£o para o envio de instruÃ§Ãµes SQL para o PostgreSQL.
        con = DriverManager.getConnection("jdbc:postgresql://localhost:5433/odontologico",
                "postgres",
                "llucas");
        //generoDAO = new GeneroDAO();  //Cria uma instÃ¢ncia de um objeto de acesso a dados a tabela de gÃªneros.
    }

    //O mÃ©todo salvar envia uma instruÃ§Ã£o INSERT para o banco de dados PostgreSQL.    
    public void marcar(Consulta Consulta) throws SQLException {
        //O caracter ? indica um parÃ¢metro (valor) que serÃ¡ passado para a instruÃ§Ã£o.
        pstm = con.prepareStatement(
                "insert into consulta(nome, endereco, email, telefone, \"data nascimento\", rg, sexo) values ( ?, ?, ?, ?, ?, ?, ?)");
        //Aqui passamos os valores de cada um dos parÃ¢metros, na ordem que estÃ£o na instruÃ§Ã£o
        //SQL, da esquerda para direita.
        pstm.setString(1, Consulta.getNome());
        pstm.setString(2, Consulta.getEndereco());
        pstm.setString(3, Consulta.getEmail());
        pstm.setString(4, Consulta.getTelefone());
        pstm.setString(5, Consulta.getData_nascimento());
        pstm.setString(6, Consulta.getRg());
        pstm.setString(7, Consulta.getSexo());
        pstm.execute();    //ApÃ³s informar todos os parÃ¢metros, mandamos executar a instruÃ§Ã£o.        
    }

    

    //O mÃ©todo excluir envia uma instruÃ§Ã£o DELETE para o banco de dados PostgreSQL.
    public void excluir(Consulta Consulta) throws SQLException {
        //Deleta o registro da tabela cujo ID Ã© informado no parÃ¢metro da instruÃ§Ã£o.
        pstm = con.prepareStatement(
                "delete from consulta where id = ?");
        pstm.setInt(1, Consulta.getId());  //Exclui de acordo com o ID informado pelo usuÃ¡rio.
        pstm.execute();
    }

    

    //Este mÃ©todo Ã© utilizado pelo IndexMB para alimentar a lista de mÃºsicas
    //que serÃ¡ apresentada na pÃ¡gina index.xhtml atravÃ©s do componente
    //<h:dataTable>
    public List<Consulta> getTodosConsulta(int ordem) throws SQLException {
        ArrayList<Consulta> lista = new ArrayList();  //Cria uma lista de mÃºsicas vazia.
        Consulta Consulta = null;  //Define um objeto do tipo Mp3 tambÃ©m vazio.
        //Genero genero = null; //Define um objeto do tipo Genero vazio.

        switch (ordem) {
            case ORDEM_POR_ID:
                pstm = con.prepareStatement("select * from consulta order by id");
                break;
            case ORDEM_POR_NOME:
                pstm = con.prepareStatement("select * from consulta order by nome");
                break;

        }

        rs = pstm.executeQuery();  //Executa o comando select.
        while (rs.next()) {          //Percorre todas as mÃºsicas retornadas pelo select.
            Consulta = new Consulta();
            Consulta.setId(rs.getInt("id"));
            Consulta.setNome(rs.getString("nome"));
           
            lista.add(Consulta);
          
        }
       return lista;
    }

}
